---
created:
source_filename: /home/runner/work/mknodes/mknodes/mknodes/pages/mkclasspage/__init__.py
source_function: MkClassPage.__init__
source_line_no: 46
hide:
- toc
icon: octicons/table-24
template: SUMMARY.html
title: MkTable
---
[:fa-brands-github: Show source on GitHub](https://github.com/phil65/mknodes/blob/main/mknodes/basenodes/mktable/__init__.py)
### Class representing a formatted table.
=== "Examples"
### Example: **Regular**
!!! jinja "Jinja"
``` {.jinja }
{{ {"Column A": ["A", "B", "C"], "Column B": ["C", "D", "E"]} | MkTable }}
```
!!! python "Python"
``` {.python }
MkTable(data={'Column A': ['A', 'B', 'C'], 'Column B': ['C', 'D', 'E']})
```
===! "Rendered"
| Column A | Column B |
| -------- | -------- |
| A | C |
| B | D |
| C | E |
=== "Markdown"
``` {.markdown }
| Column A | Column B |
| -------- | -------- |
| A | C |
| B | D |
| C | E |
```
=== "Html"
``` {.html }
Column A |
Column B |
A |
C |
B |
D |
C |
E |
```
=== "Repr tree"
```
MkTable
├── MkText('A')
├── MkText('B')
├── MkText('C')
├── MkText('C')
├── MkText('D')
╰── MkText('E')
```
=== "DocStrings"
::: mknodes.MkTable
options:
show_docstring_description: False
=== "Base classes"
| Name | Children | Inherits |
|--- | --- | --- |
| **[MkBaseTable](https://phil65.github.io/mknodes/)**
*mknodes.basenodes.mkbasetable*
Base Class for MkTables\. Only deals with managing the data\. | - [MkTable](https://phil65.github.io/mknodes/)
- [MkHtmlTable](https://phil65.github.io/mknodes/)
| - [MkContainer](https://phil65.github.io/mknodes/)
|
=== "⋔ Inheritance diagram"
``` mermaid
graph TD
93860740242912["mktable.MkTable"]
93860740306432["mkbasetable.MkBaseTable"]
93860744077920["mkcontainer.MkContainer"]
93860744073616["mknode.MkNode"]
93860744080896["node.Node"]
140589822947552["builtins.object"]
93860740306432 --> 93860740242912
93860744077920 --> 93860740306432
93860744073616 --> 93860744077920
93860744080896 --> 93860744073616
140589822947552 --> 93860744080896
```
=== "NodeFile"
``` {.toml title='/home/runner/work/mknodes/mknodes/mknodes/basenodes/mktable/metadata.toml'}
[metadata]
icon = "octicon:table-24"
name = "MkTable"
[requirements.extension.tables]
[examples.regular]
title = "Regular"
jinja = """
{{ {"Column A": ["A", "B", "C"], "Column B": ["C", "D", "E"]} | MkTable }}
"""
[example.list_of_dicts]
title = "From list of dicts"
jinja = """
{{ [{"col 1": "abc", "col 2": "cde"}, {"col 1": "fgh", "col 2": "ijk"}] | MkTable }}
"""
# [output.markdown]
# template = """
# {% for k in table_data.keys() %}
# {% endfor %}
# {% for row in self.iter_rows() %}
# {% endfor %}
# """
```
=== "Code"
``` {.python title='mknodes.basenodes.mktable.MkTable' linenums='10'}
class MkTable(mkbasetable.MkBaseTable):
"""Class representing a formatted table."""
REQUIRED_EXTENSIONS = [resources.Extension("tables")]
def _to_markdown(self) -> str:
table_data = self.data # property
if not any(table_data[k] for k in table_data):
return ""
widths = [self.width_for_column(c) for c in table_data]
formatters = [f"{{:<{width}}}" for width in widths]
headers = [formatters[i].format(k) for i, k in enumerate(table_data.keys())]
divider = [width * "-" for width in widths]
data = [
[
formatters[i].format(str(k).replace("\n", "
"))
for i, k in enumerate(row)
]
for row in self.iter_rows()
]
header_txt = "| " + " | ".join(headers) + " |"
divider_text = "| " + " | ".join(divider) + " |"
data_txt = ["| " + " | ".join(line) + " |" for line in data]
return "\n".join([header_txt, divider_text, *data_txt]) + "\n"
```